package com.company.sendemo.basics.avIOStream.serialize;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

//实例化的第4种方式
public class TestOne {

    /**
     * 运用反序列化手段
     *    序列化：将对象状态转化为可保持或传输的格式的过程，被序列化的对象必须implments Serializable
     *    反序列化：将流转化成对象的过程
     * 当两个进程在进行远程通信时，彼此可以发送各种类型的数据。
     * 无论是何种类型的数据，都会以二进制序列的形式在网络上传送。
     * 发送方需要把这个Java对象转换为字节序列，即java对象序列，才能在网络上传送，
     * 即序列化过程；接收方则需要把字节序列再恢复为java对象，即反序列化。
     * */

    //序列化对象到文件
    public static void serialize(String fileName){
        try {
            //创建一个对象输出流，讲对象输出到文件
            ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(fileName));

//            UserInfo user = new UserInfo("renyanwei","888888",20);
//            out.writeObject(user);  //序列化一个会员对象

            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //从文件反序列化到对象
    public static void deserialize(String fileName){
        try {

            //创建一个对象输入流，从文件读取对象
            ObjectInputStream in = new ObjectInputStream(new FileInputStream(fileName));

            //读取UserInfo对象并调用它的toString()方法
//            UserInfo user=(UserInfo)(in.readObject());
//            System.out.println(user.toString());

            in.close();
        }catch (Exception x){
            x.printStackTrace();
        }
        }

    public static void main(String[] args) {
        serialize("D://test.txt");
        System.out.println("序列化完毕");

        deserialize("D://test.txt");
        System.out.println("反序列化完毕");
    }

}
